/**
 * Table 组件的主题配置
 * 
 * 基于企业级设计规范 (Table.json) 的完整配置
 * 包含所有表格样式定义
 */

import type { ComponentToken } from 'antd/es/table/style';

// ========== 设计 Token 常量 ==========

/**
 * 表头相关 Token
 */
const HEADER_TOKENS = {
  // 颜色
  bg: '#fafafa',
  color: '#1a1a1a',
  splitColor: '#f0f0f0',
  
  // 排序状态
  sortActiveBg: '#f5f5f5',
  sortHoverBg: '#f5f5f5',
  
  // 筛选
  filterHoverBg: 'rgba(0, 0, 0, 0.04)',
  
  // 圆角
  borderRadius: 6,
} as const;

/**
 * 表格主体相关 Token
 */
const BODY_TOKENS = {
  // 排序列背景
  sortBg: '#fafafa',
  
  // 行状态背景
  rowHoverBg: '#fafafa',
  rowSelectedBg: '#e6f4ff',
  rowSelectedHoverBg: '#bae0ff',
  rowExpandedBg: '#fafafa',
} as const;

/**
 * 单元格相关 Token
 */
const CELL_TOKENS = {
  // 内边距
  padding: {
    block: {
      default: 16,
      md: 12,
      sm: 8,
    },
    inline: {
      default: 16,
      md: 12,
      sm: 8,
    },
  },
  
  // 字体大小
  fontSize: {
    default: 14,
    md: 14,
    sm: 14,
  },
} as const;

/**
 * 边框相关 Token
 */
const BORDER_TOKENS = {
  color: '#f0f0f0',
} as const;

/**
 * 底部相关 Token
 */
const FOOTER_TOKENS = {
  bg: '#fafafa',
  color: '#1a1a1a',
} as const;

/**
 * 固定表头相关 Token
 */
const FIXED_HEADER_TOKENS = {
  sortActiveBg: '#f5f5f5',
} as const;

/**
 * Table 完整主题配置
 * 
 * 根据设计规范文件 Table.json 定义的企业级表格样式
 * 涵盖所有表格区域、状态和尺寸的完整配置
 * 
 * @example
 * ```tsx
 * <ConfigProvider theme={{ components: { Table: tableThemeConfig } }}>
 *   <Table dataSource={data} columns={columns} />
 *   <Table size="small" dataSource={data} columns={columns} />
 *   <Table size="middle" dataSource={data} columns={columns} />
 * </ConfigProvider>
 * ```
 */
export const tableThemeConfig: Partial<ComponentToken> = {
  // ========== 表头配置 ==========
  headerBg: HEADER_TOKENS.bg,
  headerColor: HEADER_TOKENS.color,
  headerSortActiveBg: HEADER_TOKENS.sortActiveBg,
  headerSortHoverBg: HEADER_TOKENS.sortHoverBg,
  headerBorderRadius: HEADER_TOKENS.borderRadius,
  headerSplitColor: HEADER_TOKENS.splitColor,
  headerFilterHoverBg: HEADER_TOKENS.filterHoverBg,
  
  // ========== 表格主体配置 ==========
  bodySortBg: BODY_TOKENS.sortBg,
  rowHoverBg: BODY_TOKENS.rowHoverBg,
  rowSelectedBg: BODY_TOKENS.rowSelectedBg,
  rowSelectedHoverBg: BODY_TOKENS.rowSelectedHoverBg,
  rowExpandedBg: BODY_TOKENS.rowExpandedBg,
  
  // ========== 单元格配置 ==========
  // 默认尺寸
  cellPaddingBlock: CELL_TOKENS.padding.block.default,
  cellPaddingInline: CELL_TOKENS.padding.inline.default,
  cellFontSize: CELL_TOKENS.fontSize.default,
  
  // 中等尺寸
  cellPaddingBlockMD: CELL_TOKENS.padding.block.md,
  cellPaddingInlineMD: CELL_TOKENS.padding.inline.md,
  cellFontSizeMD: CELL_TOKENS.fontSize.md,
  
  // 小尺寸
  cellPaddingBlockSM: CELL_TOKENS.padding.block.sm,
  cellPaddingInlineSM: CELL_TOKENS.padding.inline.sm,
  cellFontSizeSM: CELL_TOKENS.fontSize.sm,
  
  // ========== 边框配置 ==========
  borderColor: BORDER_TOKENS.color,
  
  // ========== 底部配置 ==========
  footerBg: FOOTER_TOKENS.bg,
  footerColor: FOOTER_TOKENS.color,
  
  // ========== 固定表头配置 ==========
  fixedHeaderSortActiveBg: FIXED_HEADER_TOKENS.sortActiveBg,
};

/**
 * 获取 Table 主题配置
 * 
 * 支持部分覆盖默认配置，可以基于完整的设计规范进行定制
 * 
 * @param customConfig 自定义配置（可选）
 * @returns 合并后的主题配置
 * 
 * @example
 * ```tsx
 * // 基于设计规范的定制
 * const myTableTheme = getTableTheme({
 *   headerBg: '#f0f0f0',              // 自定义表头背景色
 *   rowHoverBg: '#e6f7ff',            // 自定义行悬浮背景色
 *   cellPaddingBlock: 20,             // 自定义单元格纵向内边距
 * });
 * 
 * <ConfigProvider theme={{ components: { Table: myTableTheme } }}>
 *   <Table dataSource={data} columns={columns} />
 * </ConfigProvider>
 * ```
 */
export const getTableTheme = (
  customConfig?: Partial<ComponentToken>
): Partial<ComponentToken> => {
  return {
    ...tableThemeConfig,
    ...customConfig,
  };
};

/**
 * 导出 Table 组件的 Token 类型
 * 方便 TypeScript 类型检查和开发时的智能提示
 */
export type { ComponentToken as TableComponentToken } from 'antd/es/table/style';

